package leetcode.editor.cn;

import java.util.Stack;

/**
 * @id: 541
 * @title: 反转字符串 II
 */
 
//给定一个字符串 s 和一个整数 k，从字符串开头算起，每 2k 个字符反转前 k 个字符。 
//
// 
// 如果剩余字符少于 k 个，则将剩余字符全部反转。
// len-i < k
// 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。 
// (len-i) < 2k && (len-i)>=k
//
// 
//
// 示例 1： 
//
// 
//输入：s = "abcdefg", k = 2
//输出："bacdfeg"
// 
//
// 示例 2： 
//
// 
//输入：s = "abcd", k = 2
//输出："bacd"
// 
//
// 
//
// 提示： 
//
// 
// 1 <= s.length <= 104 
// s 仅由小写英文组成 
// 1 <= k <= 104 
// 
// Related Topics 双指针 字符串 
// 👍 161 👎 0

public class P541ReverseStringIi {
    public static void main(String[] args) {
        Solution solution = new P541ReverseStringIi().new Solution();
        // todo
        String s = solution.reverseStr("abcdefg", 2);
        System.out.println(s);
    }
    
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String reverseStr(String s, int k) {
        if (s.length() == 1) {
            return s;
        }
        final int len = s.length();
        char[] chars = s.toCharArray();
        for (int i = 0 ; i < len ; i+=2*k) {
            reverse(chars, i, Math.min(i+k-1, len-1));
        }
        return String.valueOf(chars);
    }

    private void reverse(char[] chars, int left, int right) {
        while (left < right) {
            char temp = chars[left];
            chars[left] = chars[right];
            chars[right] = temp;
            left++;
            right--;
        }
    }
}
//leetcode submit region end(Prohibit modification and deletion)


}